Client Credentials Grant
2-legged OAuth
Clientは、Client IDとClient SecretをAuthorization Serverに渡して、Access Tokenを得る。
Resource Ownerの意思が介在する余地がない最弱仕様。
というかResource OwnerとClientが同一の存在だ。という前提がある。
Clientが単独で行える操作に限定すれば許容できる。
このフローではRefresh Tokenは使うべきでない。
実用例
サーバーアプリケーション間の認証
Twitterで誰も認証せずに(Clientだけで)公開タイムラインを取得するとき
https://plantuml-proxy.vercel.app/svg/https:/scrapbox.io/api/code/arai-ta/Client_Credentials_Grant/sequence.uml#.svg
code:sequence.uml
@startuml
participant Client
participant "Authorization Server" as Z
participant "Resource Server" as R
activate Client
Client -> Client : リソース使いたいな〜
group OAuth Client Credentials Grant
Client -> Z : POST /oauth/token \nAuthorization: Basic (clientId, clientSecret)
activate Z
Client <- Z :access tokenどうぞ
deactivate Z
end
Client -> R : GET /resource \nAuthorization: Bearer access token
activate R
Client <- R : リソースどうぞ
deactivate R
Client -> Client : リソースを使っていろいろできるぞ〜
@enduml